package com.xzlf.config;

import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperConfiguration;
import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperRegistryCenter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 注册中心配置
 */
@Configuration
public class ElasticJobRegCenterConfig {

    @Value("${regCenter.serverList}")
    private String serverList;

    @Value("${regCenter.namespace}")
    private String namespace;

    /**
     * 配置的过程大概分为以下几个步骤：
     * <p>
     * 由于 Elastic-Job依赖于 ZK，所以首先是注册中心的配置。
     * 如果想对事件的执行链路持久化，还需要配置相关JobEventConfiguration。
     * 作业核心配置：JobCoreConfiguration，配置作业名称、CRON 表达式、分片总数等。
     * 作业类型配置，如SimpleJobConfiguration，配置自己的实现等。
     * 定义Lite作业根配置 LiteJobConfiguration，配置 作业分片策略
     * 最后构建 Job，JobScheduler
     * 　　作业核心配置分为 3 级，分别是
     * JobCoreConfiguration，JobTypeConfiguration 和LiteJobConfiguration 。
     * LiteJobConfiguration 使用 JobTypeConfiguration ，
     * JobTypeConfiguration 使用 JobCoreConfiguration，层层嵌套。
     * JobTypeConfiguration 根据不同实现类型分为
     *      SimpleJobConfiguration ，DataflowJobConfiguration 和 ScriptJobConfiguration。
     *      E-Job 使用 ZK 来做分布式协调，所有的配置都会写入到 ZK 节点。
     * </p>
     * @return
     */
    @Bean(initMethod = "init")
    public ZookeeperRegistryCenter zookeeperRegistryCenter() {
        return new ZookeeperRegistryCenter(new ZookeeperConfiguration(serverList, namespace));
    }
}
